package j.util.jdbc.simple.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * pojo与数据表间的映射，及表的主键说明
 */
@Target({TYPE})
@Retention(RUNTIME)
public @interface Table {

	/**
	 * 数据表的名字，不包括schema名字
	 * 若没有指定，则以类的名字为表名
	 * @return
	 */
	String name() default "";
	
	/**
	 * schema名字，该值与表名以"."号隔开，若没有指定，表名则直接由tableName构成
	 * @return
	 */
	String schemaName() default "";
	
	/**
	 * 表的主键列表,多个以逗号隔开
	 * @return
	 */
	String pkColumns() default "";
	
	/**
	 * unique key字段列表
	 * @return
	 */
	String[] ukColumns() default {};
	
	/**
	 * 值自动生成的字段列表，即在插入/更新操作时不必明确指定值的字段
	 * @return
	 */
	String[] generatedKeyColumns() default {};

	/**
	 * 是否树表，若上，需要指定：表名字(默认实体类名)、父字段名字(p_id)、左值字段名(lft)、右值字段名(rgt)，扩号内为默认值
	 * @return
	 */
	boolean isTree() default false;

	/**
	 * 若是树表，需要指定此父字段名字
	 * @return
	 */
	String parentFieldName() default "p_id";

	/**
	 * 若是树表，需要指定此左值名字
	 * @return
	 */
	String leftFieldName() default "lft";

	/**
	 * 若是树表，需要指定此右值名字
	 * @return
	 */
	String rightFieldName() default "rgt";
}
